package com.tql;

import javax.security.auth.login.CredentialNotFoundException;

public class test1 {
    public static void main(String[] args) {
        int arr[]={1,2,5,4,-1,-99,99,-100,43,23,54,656,54,654,54};
        int arr1[]={1,2,4,5,6,9,12,54};
        int arr2[]={1,4,6,7, 9};
        maopaoSort(arr);
        for (int i = 0; i <arr.length ; i++) {
            System.out.println(arr[i]);
        }
        System.out.println(maxPonit(arr2,3));
        //二分查找
        System.out.println(arr[12]);
        System.out.println("kkkkk二分查找结果为："+binSearch1(arr,99));
        //
        String str="BGGBGBBGGBG";
        test1(str);
        System.out.println("test02=========>"+test2(arr2,0,27));
        System.out.println((3&1));

    }
    /*
    绳子最大覆盖点数
    * 时间复杂度O（N）
    * */
    public static int maxPonit(int []arr,int L){
        int left=0;
        int right=0;
        int len=arr.length;
        int max=0;
        while (left<len){
            while(right<len && arr[right]-arr[left]<=L){
               right++;
            }
            max=Math.max(max,right-(left++));
        }
        return max;
    }
    public static  void maopaoSort(int[] arr ){
        int temp;
        int len=arr.length;
        //第一轮控制重复排序次数
        for(int i=0;i<len-1;i++){
            //第二轮-1表示达到数组最大下标，-i，最外层排序好最后的数据是最大的
            for (int j=0;j<len-1-i;j++){
                if (arr[j] > arr[j+1]) {
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }

    }
    //二分查找算
    public static int binSearch1(int []arr,int key){
        int mid=arr.length/2;
        if(arr[mid]==key){
            return  mid;
        }
        int start=0;
        int end=arr.length-1;
        while(start<=end){
            mid=(end-start)/2+start;
            if(key>arr[mid]){
                start=mid+1;
            } else if(key<arr[mid]){
                end=mid-1;
            }else{
                return mid;
            }
        }
        return -1;
        }
    /*
     * 一个数组中有G和B俩个字符，只能相邻之间交换
     * 可以G全部放左边,B放右边，或者B全部放左边,G放右边
     * 请问至少需要交换几次
     * */
    public static void test1(String str){
        char []arr=str.toCharArray();
        int L=0;
        int L1=0;
        int len=arr.length;
        int sum1=0;
        int sum2=0;
        for (int j = 0; j <len ; j++) {
            if(arr[j]=='G'){
                sum1+=j-L;
                L++;
            }
        }
        for (int j = 0; j <len ; j++) {
            if(arr[j]=='B'){
                sum2+=j-L1;
                L1++;
            }
        }
        System.out.println("G在左便移动位数为："+sum1);
        System.out.println("B在左便移动位数为："+sum2);
        System.out.println("最少移动位数为："+Math.min(sum1,sum2));
    }
    //暴力算法实现一个数组的数据前面可以添加+号和-号且全部数据都要使用，和为一个target，求有多少种实现方法
    public static int test2(int[] arr,int index,int res){
        if(index==arr.length){
            return res==0?1:0;
        }
        return test2(arr,index+1,res-(arr[index]))+test2(arr,index+1,res+(arr[index]));
    }
}
